import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] arr ={1,2,3,4};

        System.out.println("原数组的打印");
        System.out.println(Arrays.toString(arr));    //原数组的打印

        System.out.println("改变参数所引用对象后，传回参数所引用新对象的打印");
        System.out.println(Arrays.toString(f1(arr)));//传回参数所指向对象的打印

        System.out.println("传进一个数组，返回一个字符串，my_string实现");
        System.out.println(my_tostring(arr));  //my_string实现

        System.out.println("数组内容拷贝:");

        System.out.println("1、创建新数组，再逐个拷贝");
        int[] arr2= new int[arr.length];  //创建新数组，再逐个拷贝
        for (int i = 0; i < arr.length; i++) {
            arr2[i]=arr[i];
        }
        System.out.println(Arrays.toString(arr2));

        System.out.println("2、用Arrays.copyOf(原数组，新数组需要的长度)方法");
        int[] arr3=Arrays.copyOf(arr,2*arr.length);  //用Arrays.copyof()方法
        System.out.println(Arrays.toString(arr3));

        //copyOfRange(原数组，开始位置，结束位置)，位置指的是下标，另外java中和python中切片一样也是左闭右开
        System.out.println("3、copyOfRange(原数组，开始位置，结束位置)，位置指的是下标，另外java中和python中切片一样也是左闭右开");
        //用clone
        System.out.println("4，用clone的方法，int arr4[] = arr.clone()");

        System.out.println("int[] arr5=arr,不是拷贝,因为只是创建出新的引用变量，而没创建数组");
        int[] arr4=arr;
        System.out.println(my_tostring(arr4));   //把地址给arr4,这个不是拷贝

    }
    //my_string实现
    public static String my_tostring(int[] arr){
        if(arr==null)
            return "null";
        String ret="[";

        for (int i = 0; i < arr.length; i++) {
            ret=ret+arr[i];
            if (i!=arr.length-1){
                ret+=", ";
            }
        }
        ret+="]";

        return ret;
    }
    //函数中新建数组(对象)，用形参来存放新对象的地址，那么形参就和原来的对象无关了
    public static int[] f1(int[] arr) {
        arr = new int[]{3, 4, 5, 6};
        return arr;
    }
}
